操作系统 |
您所在的位置:网站首页 › 操作系统 线程切换 › 操作系统 |
❮ 上一节
下一节 ❯
操作系统 - 多线程
什么是线程?
线程是通过进程代码的执行流,它有自己的程序计数器来跟踪接下来要执行的指令、保存当前工作变量的系统寄存器以及包含执行历史记录的堆栈。 p> 线程与其对等线程共享很少的信息,例如代码段、数据段和打开的文件。 当一个线程改变一个代码段内存项时,所有其他线程都会看到。 线程也称为轻量级进程。 线程提供了一种通过并行性提高应用程序性能的方法。 线程代表了一种通过减少开销来提高操作系统性能的软件方法,线程等效于经典进程。 每个线程只属于一个进程,并且没有线程可以存在于进程之外。 每个线程代表一个单独的控制流。 线程已成功用于实现网络服务器和 Web 服务器。 它们还为在共享内存多处理器上并行执行应用程序提供了合适的基础。 下图展示了单线程和多线程进程的工作原理。 ![]() 线程通过以下两种方式实现 − 用户级线程 − 用户管理的线程。 内核级线程 − 操作系统管理的线程作用于内核,一个操作系统核心。 用户级线程在这种情况下,线程管理内核不知道线程的存在。 线程库包含用于创建和销毁线程、在线程之间传递消息和数据、调度线程执行以及保存和恢复线程上下文的代码。 应用程序以单线程启动。 ![]() 在这种情况下,线程管理由内核完成。 应用区没有线程管理代码。 内核线程由操作系统直接支持。 任何应用程序都可以编程为多线程。 单个进程中支持应用程序中的所有线程。 内核为整个进程和进程中的各个线程维护上下文信息。 内核的调度是在线程的基础上完成的。 内核在内核空间中执行线程创建、调度和管理。 内核线程的创建和管理速度通常比用户线程慢。 优势 内核可以同时在多个进程上调度来自同一进程的多个线程。 如果进程中的一个线程被阻塞,内核可以调度同一进程的另一个线程。 内核例程本身可以是多线程的。 缺点 创建和管理内核线程的速度通常比用户线程慢。 在同一进程中将控制从一个线程转移到另一个线程需要对内核进行模式切换。 多线程模型某些操作系统提供组合的用户级线程和内核级线程设施。 Solaris 是这种组合方法的一个很好的例子。 在组合系统中,同一应用程序中的多个线程可以在多个处理器上并行运行,并且阻塞系统调用不需要阻塞整个进程。 多线程模型分为三种 多对多关系。 多对一关系。 一对一的关系。 多对多模型多对多模型将任意数量的用户线程多路复用到数量相等或更少的内核线程上。 下图显示了多对多线程模型,其中 6 个用户级线程与 6 个内核级线程复用。 在此模型中,开发人员可以根据需要创建尽可能多的用户线程,并且相应的内核线程可以在多处理器机器上并行运行。 该模型提供了最佳的并发精度,当一个线程执行阻塞系统调用时,内核可以调度另一个线程执行。 ![]() 多对一模型将多个用户级线程映射到一个内核级线程。 线程管理由线程库在用户空间完成。 当线程进行阻塞系统调用时,整个进程都会被阻塞。 一次只有一个线程可以访问内核,因此多个线程无法在多处理器上并行运行。 如果用户级线程库在操作系统中以系统不支持的方式实现,则内核线程使用多对一关系模式。 ![]() 用户级线程与内核级线程是一对一的关系。 此模型提供比多对一模型更多的并发性。 当一个线程进行阻塞系统调用时,它还允许另一个线程运行。 它支持多线程在微处理器上并行执行。 这种模型的缺点是创建用户线程需要对应的内核线程。 OS/2、windows NT 和 windows 2000 使用一对一的关系模型。 ![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |